home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 04 - 1988 / 04.06 Jun 88 / serial demo / menus.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-05-02  |  3.2 KB  |  153 lines  |  [TEXT/PJMM]

  1. UNIT menus;
  2.  
  3. INTERFACE
  4.  
  5.     USES
  6.         Globals, GPLib, Misc;
  7.  
  8.     PROCEDURE DoCommand (mResult : LongInt);
  9.  
  10. IMPLEMENTATION
  11.  
  12.     PROCEDURE doAbout;
  13.         VAR
  14.             IDStrHandle : StringHandle;
  15.             dialogP : DialogPtr;
  16.             item : integer;
  17.             Str1, Str2, Str3 : str255;
  18.             myHeapSpace : LongInt;
  19.             FreeSpace : Size;
  20.     BEGIN
  21.         IDStrHandle := StringHandle(GetResource(rsrc, 0));
  22.         IF IDStrHandle = NIL THEN
  23.             BEGIN
  24.                 doMessage('Get About box crash!', '', '', '');
  25.                 ExitToShell;
  26.             END;
  27.         MoveHHi(Handle(IDStrHandle));
  28.         HLock(Handle(IDStrHandle));
  29.         FreeSpace := FreeMem;
  30.         myHeapSpace := MaxMem(FreeSpace);
  31.         NumToString(myHeapSpace, Str2);
  32.         Str2 := concat('Memory = ', Str2);
  33.         Str3 := '';
  34.         Str1 := '';
  35.         ParamText(IDStrHandle^^, Str1, Str2, Str3);
  36.         dialogP := GetNewDialog(AboutDialog, NIL, pointer(-1));
  37.         IF dialogP = NIL THEN
  38.             BEGIN
  39.                 doMessage('Dialog crash!', 'We are dead...', '', '');
  40.                 ExitToShell;
  41.             END;
  42.         initCursor;
  43.         ModalDialog(NIL, item);
  44.         DisposDialog(dialogP);
  45.         HUnlock(Handle(IDStrHandle));
  46.     END;
  47.  
  48.     PROCEDURE Do_comm_commands (whichMenu, whichItem : INTEGER);
  49.  
  50.         VAR
  51.             errC : INTEGER;
  52.             resetmodem : boolean;
  53.  
  54.     BEGIN
  55.         resetmodem := false;
  56.         CASE whichMenu OF
  57.             baudMenu : 
  58.                 BEGIN
  59.                     Place_checkmarks(baudMenu, b300, b19200, whichItem);
  60.                     resetmodem := true;
  61.                     CASE whichItem OF
  62.                         b300 : 
  63.                             baud := 380;
  64.                         b1200 : 
  65.                             baud := 94;
  66.                         b2400 : 
  67.                             baud := 46;
  68.                         b4800 : 
  69.                             baud := 22;
  70.                         b9600 : 
  71.                             baud := 10;
  72.                         b19200 : 
  73.                             baud := 4;
  74.                     END;  {CASE whichItem}
  75.                 END;  {baudMenu}
  76.  
  77.             parityMenu : 
  78.                 BEGIN
  79.                     Place_checkmarks(parityMenu, noP, oddP, whichItem);
  80.                     resetmodem := true;
  81.                     CASE whichItem OF
  82.                         noP : 
  83.                             parity := 8192;
  84.                         evenP : 
  85.                             parity := 12288;
  86.                         oddP : 
  87.                             parity := 4096;
  88.                     END;  {CASE whichItem}
  89.                 END;  {parityMenu}
  90.  
  91.             bitsMenu : 
  92.                 BEGIN
  93.                     resetmodem := true;
  94.                     IF whichItem < 3 THEN
  95.                         Place_checkmarks(bitsMenu, bData7, bData8, whichItem)
  96.                     ELSE
  97.                         Place_checkmarks(bitsMenu, bStop1, bStop2, whichItem);
  98.                     CASE whichItem OF
  99.                         bData7 : 
  100.                             dataBits := 1024;
  101.                         bData8 : 
  102.                             dataBits := 3072;
  103.                         bStop1 : 
  104.                             stopBits := 16384;
  105.                         bStop15 : 
  106.                             stopBits := -32768;
  107.                         bStop2 : 
  108.                             stopBits := -16384;
  109.                     END;  {CASE whichItem}
  110.                 END;  {bitsMenu}
  111.  
  112.         END;  {CASE whichMenu}
  113.  
  114.         IF resetmodem THEN
  115.             BEGIN
  116.                 serConfig := baud + parity + dataBits + stopBits;
  117.                 errC := SerReset(inRefNumA, serConfig);
  118.                 errC := SerReset(outRefNumA, serConfig);
  119.                 errC := SerReset(inRefNumB, serConfig);
  120.                 errC := SerReset(outRefNumB, serConfig);
  121.             END;
  122.  
  123.     END;  {Do_comm_commands}
  124.  
  125.     PROCEDURE DoCommand;         {(mResult : LongInt)}
  126.         VAR
  127.             name, command : STR255;
  128.  
  129.     BEGIN
  130.         theMenu := HiWord(mResult);
  131.         theItem := LoWord(mResult);
  132.         CASE theMenu OF
  133.             appleMenu : 
  134.                 IF theItem = aAbout THEN
  135.                     doAbout
  136.                 ELSE
  137.                     BEGIN
  138.                         GetItem(myMenus[applemenu], theItem, name);
  139.                         refNum := OpenDeskAcc(name);
  140.                     END;
  141.             fileMenu : 
  142.                 CASE theItem OF
  143.                     7 : 
  144.                         doneFlag := TRUE; { Quit }
  145.                 END;        { theItem case }
  146.  
  147.             OTHERWISE
  148.                 Do_comm_commands(theMenu, theItem);
  149.         END; { of menu case }
  150.  
  151.         HiliteMenu(0);
  152.     END; { of DoCommand }
  153. END.